// 该程序先通过调用pathconf函数找到 最大路径名长度，从而避免PATH_MAX问题的程序
// 由于程序在运行前并不知道路径的长度，因此它动态地为路径分配缓冲区
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    char *buf;
    long maxpath;

    maxpath = pathconf(".", _PC_PATH_MAX);
    if (maxpath == -1) {
        perror("Failed to determine the pathname length");
        return 1;
    }

    buf = (char *)malloc(maxpath);
    if (buf == NULL) {
        perror("Failed to allocate space for pathname");
        return 1;
    }

    if ( (getcwd(buf, maxpath)) == NULL) {
        perror("Failed to get current working directory");
        return 1;
    }

    printf("current directory: %s\n", buf);

    // note：使用malloc分配地地址空间需要手动开辟、手动释放
    free(buf);

    return 0;
}